NutriPlot

Author

Andrés A.

Published

April 19, 2024

Why this graph ?

Consuming foods rich in protein but low in calories plays a crucial role in managing body weight and reducing body fat percentage. Moreover, high-protein foods often induce a stronger feeling of satiety. When tailoring a diet to enhance muscle growth, comprehending the calorie and protein composition of various foods is essential. The objective of this graph is to determine which foods offer the highest protein content per fixed amount of calories.

Hence, I designed this scatter plot to facilitate visualizing which foods offer ample protein while being economical in calories.

However, there are limitations to consider when interpreting this graph:

  • Firstly, the Y-axis may seem somewhat counter intuitive as it represents protein density per 100 kcal.
  • The satiety levels associated with each food vary significantly and could significantly influence dietary choices.
  • It’s important to note that prioritizing high-protein foods doesn’t imply exclusive reliance on them; a balanced diet, devoid of excess, remains the optimal recommendation for most individuals.

How to read this scatter plot

On the axis, as you move towards the right, the food becomes more calorie-dense. Similarly, moving upwards indicates increasing protein density.

Consequently:

  • Top left indicates foods with high protein content per calorie and low calorie count per 100g.
  • Bottom right represents foods with low protein content per calorie but high overall calorie count per 100g.
  • Top right denotes foods with high protein content per calorie and high calorie count per 100g.
  • Bottom left signifies foods with low protein content per calorie and low calorie count per 100g.
Code
source("libraries.R")

dr <- read_csv("prot.csv", show_col_types = FALSE )

df <- dr %>% 
  mutate(perc_prot = prot_per_100g/kcal_per_100g*100, prot_per_serving = prot_per_100g *serving /100,
         kal_per_serving = kcal_per_100g*serving /100)

scatter_plot1 <- df %>% 
  ggplot() +
  # Add points to the plot with kcal on x-axis and perc_prot on y-axis
  geom_point(aes(x = kcal_per_100g, y = perc_prot, color = perc_prot, text = name)) +    
  # Add text labels using geom_text_repel
  geom_text_repel(aes(x = kcal_per_100g, y = perc_prot, label = name), force = 6) +  
  scale_x_continuous(n.breaks = 10,limits = c(0,700)) +
  scale_y_continuous(n.breaks = 10,limits = c(0,23)) +
  scale_color_gradient(low = 'red',high = "green") +
  theme(legend.position = "none") +
  labs(y = "Protein Density [%]", x = "kcal for 100 grams of food ")    

scatter_plot1
Figure 1: for 100g of content
Code
table_recap <- df %>% 
  select(name,kcal_per_100g,prot_per_100g,perc_prot) %>% 
  dplyr::arrange(desc(perc_prot)) %>% 
  kable(col.names = c("names","Kcal for 100g","grams protein for 100g of food","Protein Density [%]"),
        digits = 2)


table_recap
names Kcal for 100g grams protein for 100g of food Protein Density [%]
Tuna 115 27.00 23.48
Hake 64 15.00 23.44
Whey 377 83.00 22.02
Cod 81 17.00 20.99
Hake Fillet 81 17.00 20.99
Skyr 61 12.00 19.67
Turkey 119 21.70 18.24
Skimmed Quark 63 10.00 15.87
Chicken Breast 195 29.50 15.13
Lean Ground Beef 137 20.00 14.60
Cottage Cheese 97 12.00 12.37
Light Mozzarella 165 20.00 12.12
Tofu 126 13.00 10.32
Skimmed Milk 33 3.30 10.00
Protein Bar 355 35.00 9.86
Salmon 202 19.00 9.41
Light Feta 174 16.00 9.20
Parmesan 392 35.00 8.93
Greek Yogurt 114 10.00 8.77
Eggs 147 12.50 8.50
Zucchini 16 1.21 7.56
Chickpeas 128 9.00 7.03
Mixed Minced Meat 256 18.00 7.03
Gruyère 413 29.00 7.02
Fish finger 190 13.00 6.84
Muesli 410 28.00 6.83
Green Peas 77 5.20 6.75
Red Beans 132 8.80 6.67
Black Beans 91 6.00 6.59
Bacon Bits 270 17.00 6.30
Lentils 165 8.30 5.03
Peanuts 567 25.80 4.55
Red Bell Pepper 26 1.00 3.85
Oats 357 13.50 3.78
Almonds 578 21.26 3.68
Pasta 371 13.00 3.50
Quinoa 143 5.00 3.50
Almond Milk 15 0.50 3.33
Chia Seeds 490 15.00 3.06
Walnuts 654 15.00 2.29
Banana 89 2.00 2.25
Steamed Potatoes 85 1.70 2.00
Apples 52 0.26 0.50

Caption